OS. 動的出力の取得
次の例のマクロでは、いくつかのOpenSTAAD動的出力関数を使用して、動的解析の結果のモード形状レポートを作成します。
この例について
このマクロでは、最初に解析結果が利用可能であるかを確認します。可能な場合、テキストの結果ファイルへの情報の出力を開始します。抽出されたモードの数がゼロより大きい場合、モーダル振動数、モーダル有効質量比、およびモーダル歪みがこのレポートに出力されます。
このコードは、.vbsファイルに直接保存することも、STAAD.Proで使用するマクロプロジェクトでマクロエディタに貼り付けることもできます。
Visual Basicコード
Option Explicit
Sub Main()
Dim stdFile As String
Dim stdFolder As String
Dim rptFile As String
Dim Tokens() As String
Dim boolResults As Boolean
Dim objOpenSTAAD As Object
Set objOpenSTAAD = GetObject(,"StaadPro.OpenSTAAD")
objOpenSTAAD.GetSTAADFile(stdFile, False)
objOpenSTAAD.GetSTAADFileFolder(stdFolder)
If objOpenSTAAD.Output.AreResultsAvailable = "True" Then
Tokens = Split(stdFile,".")
rptFile = stdFolder + "\" + Tokens(0) + ".ModeShapeData.txt"
CreateModeShapeReport(rptFile, objOpenSTAAD, stdFile)
Else
MsgBox("No analysis results available for this input file",vbOkOnly,"Error")
End If
Set objOpenSTAAD = Nothing
End Sub
Private Function CreateModeShapeReport(rptFile As String, objOpenSTAAD As Object, stdFile As String)
Dim I As Integer, J As Integer
Dim nNodeCount As Long
Dim nModeCount As Long
Dim nModeNo As Long
Dim strLenUnit As String
Dim setOfNodes() As Long
Dim setOfFrequency() As Double
Dim modVal(6) As Double
Dim szName As String
Dim tblno As Long
Dim rptno As Long
Dim idx As Long
Dim geometry As OSGeometryUI
Dim Output As OSOutputUI
Set geometry = objOpenSTAAD.Geometry
Set Output = objOpenSTAAD.Output
nNodeCount = geometry.GetNodeCount()
'Variant GetNoOfModesExtracted();
nModeCount = Output.GetNoOfModesExtracted()
Open rptFile For Output As #10
Print #10, "Mode Shape Data Report for",stdFile
Print #10, ""
Print #10, Space$(3);"No of Nodes = ";nNodeCount
Print #10, Space$(3);"No of Modes Extracted = ";nModeCount
Print #10, ""
If nModeCount > 0 Then
ReDim setOfNodes(nNodeCount)
ReDim setOfFrequency(nModeCount)
'Variant GetModeFrequency(Variant varMode, Variant varFreq);
Print #10, "Mode Frequency (Hz)"
Print #10, "-------------------------"
For I = 0 To nModeCount - 1
nModeNo = I+1
Output.GetModeFrequency(nModeNo, setOfFrequency(I))
Print #10, nModeNo;Space$(10);Format$(setOfFrequency(I),"Standard")
Next
Print #10, "-------------------------"
Print #10,
'Variant GetModalMassParticipationFactors(Long longMode, Variant varfactorX, Variant varfactorY, Variant varfactorZ);
Dim Participation(3) As Double
Dim ParticipationSum(3) As Double
Print #10, Space$(18);"Modal Participation Factors Table"
Print #10, "Mode Participation X (%) Participation Y (%) Participation Z (%)"
Print #10, "-------------------------------------------------------------------------"
For I = 0 To nModeCount - 1
nModeNo = I+1
Output.GetModalMassParticipationFactors(nModeNo, Participation(1), Participation(2), Participation(3))
Print #10, nModeNo;Space$(10);Format$(Participation(1),"#0.00"); Space$(20); Format$(Participation(2),"#0.00"); Space$(20); Format$(Participation(3),"##0.00")
ParticipationSum(1) = ParticipationSum(1) +Participation(1)
ParticipationSum(2) = ParticipationSum(2) +Participation(2)
ParticipationSum(3) = ParticipationSum(3) +Participation(3)
Next
Print #10, "-------------------------------------------------------------------------"
Print #10, "Sum";Space$(9);Format$(ParticipationSum(1),"#0.00"); Space$(20); Format$(ParticipationSum(2),"#0.00"); Space$(20); Format$(ParticipationSum(3),"#0.00")
Print #10,
'Variant GetModalDisplacementAtNode(Variant varMode, Variant arNode, Variant varModalDisps);
geometry.GetNodeList(setOfNodes)
objOpenSTAAD.GetInputUnitForLength(strLenUnit)
Print #10, Space$(10);"Modal Displacements Table"
Print #10, "Mode Node x y z"
Print #10, Space$(18);"(";strLenUnit;")";Space$(9);"(";strLenUnit;")";Space$(10);"(";strLenUnit;")"
Print #10, "--------------------------------------------------"
For I = 0 To nModeCount - 1
nModeNo = I+1
For J = 0 To nNodeCount - 1
Output.GetModalDisplacementAtNode(nModeNo, setOfNodes(J), modVal)
Print #10, Format$(nModeNo,"00");Space$(5);Format$(setOfNodes(J),"000");Space$(5);Format$(modVal(0),"Scientific");Space$(5);Format$(modVal(1),"Scientific");Space$(5);Format$(modVal(2),"Scientific")
Next J
Next I
Print #10, "--------------------------------------------------"
Print #10,
'The following function is currently not operational:-
'Variant GetMissingMassParticipationFactors
End If
Close #10
End Function